package com.xiliu.rocketmq;

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;

/**
 * @author xiliu
 * @description 发送同步消息 demo
 * @date 2022/3/2
 */
public class SyncProducerDemo {

    public static void main(String[] args) throws Exception {
        DefaultMQProducer producer = new DefaultMQProducer("xiliu_producer_group");
        producer.setNamesrvAddr("42.194.222.32:9876");
        producer.start();
        String msgStr = "用户A发送同步消息给用户B";
        /*Message代表一条信息，第一个参数是topic，这是主题
        第二个参数是tags，这是可选参数，用于消费端过滤消息
        第三个参数是keys，这也是可选参数，如果有多个，用空格隔开。RocketMQ可以根据这些key快速检索到消息，相当于
        消息的索引，可以设置为消息的唯一编号（主键）。
        第四个参数是body，消息主体*/
        Message message = new Message("broker-a","xiliu_tag",msgStr.getBytes(RemotingHelper.DEFAULT_CHARSET));
        //SendResult是发送结果的封装，包括消息状态，消息id，选择的队列等等，只要不抛异常，就代表发送成功
        SendResult sendResult = producer.send(message,10000);
        System.out.println("消息状态：" + sendResult.getSendStatus());
        System.out.println("消息id：" + sendResult.getMsgId());
        System.out.println("消息queue：" + sendResult.getMessageQueue());
        System.out.println("消息offset：" + sendResult.getQueueOffset());
        producer.shutdown();
    }
}
